
import com.typesafe.tools.mima.core._

object MiMaFilters {

  object Scala3Library {

    val ForwardsBreakingChanges: Map[String, Seq[ProblemFilter]] = Map(
      // Additions that require a new minor version of the library
      Build.mimaPreviousDottyVersion -> Seq(
        // Scala.js-only class
        ProblemFilters.exclude[FinalClassProblem]("scala.scalajs.runtime.AnonFunctionXXL"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.scalajs.runtime.AnonFunctionXXL.this"),

        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language.2.13"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$2$u002E13$"),

        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Conversion.underlying"),
        ProblemFilters.exclude[MissingClassProblem]("scala.Conversion$"),
        ProblemFilters.exclude[MissingClassProblem]("scala.annotation.internal.RuntimeChecked"),
        ProblemFilters.exclude[MissingClassProblem]("scala.annotation.stableNull"),

        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.NamedTuple.namedTupleOrdering"),
        ProblemFilters.exclude[MissingClassProblem]("scala.NamedTuple$namedTupleOrdering"),

		// cc related
        ProblemFilters.exclude[MissingClassProblem]("scala.annotation.internal.readOnlyCapability"),
        ProblemFilters.exclude[MissingClassProblem]("scala.annotation.internal.onlyCapability"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language#experimental.separationChecking"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$experimental$separationChecking$"),
        ProblemFilters.exclude[MissingClassProblem]("scala.caps.Capability"),
        ProblemFilters.exclude[MissingClassProblem]("scala.caps.Classifier"),
        ProblemFilters.exclude[MissingClassProblem]("scala.caps.SharedCapability"),
        ProblemFilters.exclude[MissingClassProblem]("scala.caps.Control"),
      ),

      // Additions since last LTS
      Build.mimaPreviousLTSDottyVersion -> Seq(
        ProblemFilters.exclude[MissingClassProblem]("scala.NamedTuple"),
        ProblemFilters.exclude[MissingClassProblem]("scala.NamedTuple$"),
        ProblemFilters.exclude[MissingClassProblem]("scala.NamedTupleDecomposition"),
        ProblemFilters.exclude[MissingClassProblem]("scala.NamedTupleDecomposition$"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule.ValOrDefDefMethods"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule.ValOrDefDefTypeTest"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#defnModule.FunctionClass"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#defnModule.PolyFunctionClass"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#FlagsModule.AbsOverride"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SymbolMethods.paramVariance"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#TypeLambdaMethods.paramVariances"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#TypeReprMethods.dealiasKeepOpaques"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuples.reverse"),
        ProblemFilters.exclude[MissingClassProblem]("scala.annotation.publicInBinary"),
        ProblemFilters.exclude[MissingClassProblem]("scala.annotation.internal.AssignedNonLocally"),
        ProblemFilters.exclude[MissingClassProblem]("scala.annotation.internal.CaptureChecked"),
        ProblemFilters.exclude[MissingClassProblem]("scala.annotation.internal.reachCapability"),
        ProblemFilters.exclude[MissingClassProblem]("scala.annotation.internal.preview"),
        ProblemFilters.exclude[MissingClassProblem]("scala.annotation.unchecked.uncheckedCaptures"),
        ProblemFilters.exclude[MissingClassProblem]("scala.quoted.Quotes$reflectModule$ValOrDefDefMethods"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$3$u002E4$"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$3$u002E4$minusmigration$"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$3$u002E5$"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$3$u002E5$minusmigration$"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$experimental$clauseInterleaving$"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$experimental$relaxedExtensionImports$"),
        ProblemFilters.exclude[MissingClassProblem]("scala.scalajs.runtime.AnonFunctionXXL"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language.3.4-migration"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language.3.4"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language.3.5-migration"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language.3.5"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language#experimental.clauseInterleaving"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language#experimental.relaxedExtensionImports"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$3$u002E6$minusmigration$"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language.3.6-migration"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$3$u002E6$"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language.3.6"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.annotation.experimental.this"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.compiletime.package#package.deferred"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule.MethodTypeKind"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule.FlexibleTypeTypeTest"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule.FlexibleType"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule.FlexibleTypeMethods"),
        ProblemFilters.exclude[MissingClassProblem]("scala.quoted.Quotes$reflectModule$FlexibleTypeMethods"),
        ProblemFilters.exclude[MissingClassProblem]("scala.quoted.Quotes$reflectModule$FlexibleTypeModule"),
        ProblemFilters.exclude[MissingClassProblem]("scala.quoted.Quotes$reflectModule$MethodTypeKind"),
        ProblemFilters.exclude[MissingClassProblem]("scala.quoted.Quotes$reflectModule$MethodTypeKind$"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#MethodTypeMethods.isContextual"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#MethodTypeMethods.methodTypeKind"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#MethodTypeModule.apply"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SymbolMethods.isSuperAccessor"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#ImplicitsModule.searchIgnoring"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.Expr.summonIgnoring"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("scala.quoted.runtime.Patterns.higherOrderHoleWithTypes"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language#experimental.namedTuples"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language#experimental.modularity"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language#experimental.betterMatchTypeExtractors"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$experimental$betterMatchTypeExtractors$"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$experimental$modularity$"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$experimental$namedTuples$"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language#experimental.betterFors"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$experimental$betterFors$"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language#experimental.quotedPatternsWithPolymorphicFunctions"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$experimental$quotedPatternsWithPolymorphicFunctions$"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language#experimental.packageObjectValues"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$experimental$packageObjectValues$"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language.3.7-migration"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language.3.7"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$3$u002E7$"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$3$u002E7$minusmigration$"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language.3.8-migration"),
        ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language.3.8"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$3$u002E8$"),
        ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$3$u002E8$minusmigration$"),
      ),
    )

    val BackwardsBreakingChanges: Map[String, Seq[ProblemFilter]] = Map(
      // In general we should never have backwards incompatible changes in the library.
      // Only exceptional cases should be added here.

      // Breaking changes since last reference version
      Build.mimaPreviousDottyVersion -> // Seq.empty, // We should never break backwards compatibility
        Seq(
          // Scala.js-only class, which is subject to IR deserializatiation hacks to preserve bincompat.
          // It's OK. Scala.js did the same:
          // https://github.com/scala-js/scala-js/blob/v1.19.0/project/BinaryIncompatibilities.scala#L66-L71
          ProblemFilters.exclude[AbstractClassProblem]("scala.scalajs.runtime.AnonFunctionXXL"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.scalajs.runtime.AnonFunctionXXL.this"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.scalajs.runtime.AnonFunctionXXL.apply"),

          // `ReversedMissingMethodProblem`s are acceptable. See comment in `Breaking changes since last LTS`.
          ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule.FlexibleType"),
          ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule.FlexibleTypeTypeTest"),
          ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule.FlexibleTypeMethods"),
          ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SymbolMethods.isSuperAccessor"),
          ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule.MethodTypeKind"),
          ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#MethodTypeModule.apply"),
          ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#MethodTypeMethods.methodTypeKind"),
          ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#MethodTypeMethods.isContextual"),
          ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#ImplicitsModule.searchIgnoring"),
          ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#ValDefModule.let"),
          ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SymbolModule.newClass"),
          ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SymbolModule.newModule"),

          // Change `experimental` annotation to a final class
          ProblemFilters.exclude[FinalClassProblem]("scala.annotation.experimental"),

          // ================================== STDLIB MIGRATION ==================================
          // ============================ module classes are not final ============================
          ProblemFilters.exclude[FinalClassProblem]("scala.Array$UnapplySeqWrapper$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.Enumeration$ValueOrdering$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.Enumeration$ValueSet$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.Function1$UnliftOps$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.PartialFunction$ElementWiseExtractor$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.Predef$ArrowAssoc$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.Predef$Ensuring$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.Predef$StringFormat$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.Predef$any2stringadd$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.StringContext$s$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.language$experimental$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$dynamics$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$existentials$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$experimental$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$experimental$macros$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$higherKinds$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$implicitConversions$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$postfixOps$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$reflectiveCalls$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.package$$hash$colon$colon$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.IterableOps$SizeCompareOps$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.Searching$Found$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.Searching$InsertionPoint$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.Searching$SearchImpl$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.SeqFactory$UnapplySeqWrapper$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.StepperShape$Shape$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.View$Empty$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.View$Filter$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.package$$colon$plus$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.package$$plus$colon$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.convert.StreamExtensions$AccumulatorFactoryInfo$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.convert.StreamExtensions$AccumulatorFactoryInfo$anyAccumulatorFactoryInfoPrototype$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.convert.StreamExtensions$StreamShape$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.convert.StreamExtensions$StreamUnboxer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.generic.BitOperations$Int$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.generic.BitOperations$Long$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.IntMap$ToBuildFrom$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.IntMap$ToFactory$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.LazyList$$hash$colon$colon$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.LazyList$Deferrer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.LazyList$LazyBuilder$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.LazyList$cons$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.ListMap$EmptyListMap$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.ListSet$EmptyListSet$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.LongMap$ToBuildFrom$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.LongMap$ToFactory$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Map$EmptyMap$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Queue$EmptyQueue$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Range$BigDecimal$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Range$BigInt$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Range$Int$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Range$Long$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Range$Partial$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.SeqMap$EmptySeqMap$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Set$EmptySet$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Stream$$hash$colon$colon$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Stream$Deferrer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Stream$Empty$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Stream$cons$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.TreeMap$TreeMapBuilder$adder$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.TreeSeqMap$OrderBy$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.TreeSeqMap$OrderBy$Insertion$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.TreeSeqMap$OrderBy$Modification$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.TreeSeqMap$Ordering$Bin$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.TreeSeqMap$Ordering$Iterator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.TreeSeqMap$Ordering$Tip$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.TreeSeqMap$Ordering$Zero$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.WrappedString$UnwrapOp$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.mutable.AnyRefMap$ToBuildFrom$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.mutable.AnyRefMap$ToFactory$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.mutable.LongMap$ToBuildFrom$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.mutable.LongMap$ToFactory$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.mutable.RedBlackTree$Node$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.mutable.RedBlackTree$Tree$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.collection.mutable.UnrolledBuffer$Unrolled$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.BatchingExecutorStatics$MissingParentBlockContext$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.BlockContext$DefaultBlockContext$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.ExecutionContext$Implicits$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.ExecutionContext$parasitic$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.Future$never$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.Deadline$DeadlineIsOrdered$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.Duration$DurationIsOrdered$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.DurationConversions$fromNowConvert$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.DurationConversions$spanConvert$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.FiniteDuration$FiniteDurationIsOrdered$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.package$DoubleMult$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.package$DurationDouble$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.package$DurationInt$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.package$DurationLong$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.package$IntMult$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.package$LongMult$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.package$fromNow$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.package$span$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.io.Source$NoPositioner$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.io.Source$RelaxedPosition$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.io.Source$RelaxedPositioner$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.Accumulator$AccumulatorFactoryShape$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.DurationConverters$JavaDurationOps$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.DurationConverters$ScalaDurationOps$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaBiConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaBiFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaBiPredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaBinaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaBooleanSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaDoubleBinaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaDoubleConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaDoubleFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaDoublePredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaDoubleSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaDoubleToIntFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaDoubleToLongFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaDoubleUnaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaIntBinaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaIntConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaIntFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaIntPredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaIntSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaIntToDoubleFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaIntToLongFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaIntUnaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaLongBinaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaLongConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaLongFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaLongPredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaLongSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaLongToDoubleFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaLongToIntFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaLongUnaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaObjDoubleConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaObjIntConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaObjLongConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaPredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaToDoubleBiFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaToDoubleFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaToIntBiFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaToIntFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaToLongBiFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaToLongFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaUnaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaBiConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaBiFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaBiPredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaBinaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaBooleanSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleBinaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoublePredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleToIntFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleToLongFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleUnaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntBinaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntPredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntToDoubleFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntToLongFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoublePredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleToIntFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleToLongFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleUnaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntBinaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntPredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntToDoubleFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntToLongFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntUnaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaLongBinaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaLongConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaLongFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaLongPredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaLongSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaLongToDoubleFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaLongToIntFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaLongUnaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaObjDoubleConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaObjIntConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaObjLongConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaPredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaToDoubleBiFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaToDoubleFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaToIntBiFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaToIntFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaToLongBiFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaToLongFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaUnaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichBiConsumerAsFunction2$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichBiFunctionAsFunction2$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichBiPredicateAsFunction2$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichBinaryOperatorAsFunction2$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichBooleanSupplierAsFunction0$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichConsumerAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichDoubleBinaryOperatorAsFunction2$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichDoubleConsumerAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichDoubleFunctionAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichDoublePredicateAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichDoubleSupplierAsFunction0$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichDoubleToIntFunctionAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichDoubleToLongFunctionAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichDoubleUnaryOperatorAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction0AsBooleanSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction0AsDoubleSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction0AsIntSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction0AsLongSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction0AsSupplier$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsDoubleConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsDoubleFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsDoublePredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsDoubleToIntFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsDoubleToLongFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsDoubleUnaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsIntConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsIntFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsIntPredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsIntToDoubleFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsIntToLongFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsIntUnaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsLongConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsLongFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsLongPredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsLongToDoubleFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsLongToIntFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsLongUnaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsPredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsToDoubleFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsToIntFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsToLongFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsUnaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsBiConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsBiFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsBiPredicate$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsBinaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsDoubleBinaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsIntBinaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsLongBinaryOperator$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsObjDoubleConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsObjIntConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsObjLongConsumer$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsToDoubleBiFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsToIntBiFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsToLongBiFunction$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunctionAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichIntBinaryOperatorAsFunction2$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichIntConsumerAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichIntFunctionAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichIntPredicateAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichIntSupplierAsFunction0$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichIntToDoubleFunctionAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichIntToLongFunctionAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichIntUnaryOperatorAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichLongBinaryOperatorAsFunction2$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichLongConsumerAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichLongFunctionAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichLongPredicateAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichLongSupplierAsFunction0$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichLongToDoubleFunctionAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichLongToIntFunctionAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichLongUnaryOperatorAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichObjDoubleConsumerAsFunction2$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichObjIntConsumerAsFunction2$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichObjLongConsumerAsFunction2$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichPredicateAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichSupplierAsFunction0$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichToDoubleBiFunctionAsFunction2$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichToDoubleFunctionAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichToIntBiFunctionAsFunction2$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichToIntFunctionAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichToLongBiFunctionAsFunction2$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichToLongFunctionAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichUnaryOperatorAsFunction1$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FutureConverters$CompletionStageOps$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FutureConverters$FutureOps$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.OptionConverters$RichOption$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.OptionConverters$RichOptional$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.OptionConverters$RichOptionalDouble$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.OptionConverters$RichOptionalInt$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.jdk.OptionConverters$RichOptionalLong$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.BigDecimal$RoundingMode$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$BigDecimal$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$BigInt$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Boolean$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Byte$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Char$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$DeprecatedDoubleEquiv$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$DeprecatedFloatEquiv$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Double$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Double$IeeeEquiv$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Double$StrictEquiv$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Float$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Float$IeeeEquiv$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Float$StrictEquiv$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Implicits$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Int$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Long$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Short$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$String$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Symbol$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Unit$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Fractional$Implicits$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Integral$Implicits$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$BigDecimalAsIfIntegral$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$BigDecimalIsConflicted$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$BigDecimalIsFractional$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$BigIntIsIntegral$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$ByteIsIntegral$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$CharIsIntegral$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$DoubleIsFractional$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$FloatIsFractional$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$Implicits$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$IntIsIntegral$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$LongIsIntegral$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$ShortIsIntegral$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$BigDecimal$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$BigInt$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Boolean$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Byte$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Char$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$DeprecatedDoubleOrdering$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$DeprecatedFloatOrdering$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Double$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Double$IeeeOrdering$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Double$TotalOrdering$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Float$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Float$IeeeOrdering$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Float$TotalOrdering$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Implicits$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Int$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Long$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Short$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$String$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Symbol$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Unit$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.reflect.ClassTag$cache$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.runtime.Tuple2Zipped$Ops$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.runtime.Tuple3Zipped$Ops$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.sys.Prop$DoubleProp$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.sys.Prop$FileProp$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.sys.Prop$IntProp$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.sys.Prop$StringProp$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.util.Either$LeftProjection$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.util.Either$MergeableEither$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.util.Either$RightProjection$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.util.Using$Manager$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.util.Using$Releasable$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.util.Using$Releasable$AutoCloseableIsReleasable$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.util.package$chaining$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.util.control.Exception$Catch$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.util.control.TailCalls$Call$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.util.control.TailCalls$Cont$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.util.control.TailCalls$Done$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.util.matching.Regex$Groups$"),
          ProblemFilters.exclude[FinalClassProblem]("scala.util.matching.Regex$Match$"),
          // ====== objects inside classes will get a method too, `module def` :) ======
          ProblemFilters.exclude[FinalMethodProblem]("scala.Enumeration.ValueOrdering"),
          ProblemFilters.exclude[FinalMethodProblem]("scala.Enumeration.ValueSet"),
          ProblemFilters.exclude[FinalMethodProblem]("scala.StringContext.s"),
          ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.RelaxedPosition"),
          ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.RelaxedPositioner"),
          ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.NoPositioner"),

          // Class initializers, fine to omit them
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.language.<clinit>"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.language#experimental.<clinit>"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Properties.<clinit>"),

          // These are inner objects/private classes and it is fine to not have the outer reference captured.
          // The code that is emitted is correct within the compilation unit and does not escape it
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Enumeration#ValueOrdering.this"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.IterableOnceOps#Maximized.this"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.LinearSeqIterator#LazyCell.this"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.mutable.PriorityQueue#ResizableArrayAccess.this"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.BatchingExecutor#AbstractBatch.this"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.Channel#LinkedList.this"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.io.Source#RelaxedPosition.this"),

          // Issue #22495 (will be fixed in a later PR and should be fixed before any release)
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.ArrayOps.iterateUntilEmpty$extension"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.ArrayOps.scala$collection$ArrayOps$$elemTag$extension"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.isLineBreak$extension"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.isLineBreak2$extension"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.linesSeparated$extension"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.escape$extension"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.toBooleanImpl$extension"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.unwrapArg$extension"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.iterateUntilEmpty$extension"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple2Zipped.coll1$extension"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple2Zipped.coll2$extension"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple3Zipped.coll1$extension"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple3Zipped.coll2$extension"),
          ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple3Zipped.coll3$extension"),

          // TO INVESTIGATE: This constructor changed, but it is private... why complaining?
          ProblemFilters.exclude[IncompatibleMethTypeProblem]("scala.collection.immutable.LazyList.this"),
          // This one should be fine, public class inside private object
          ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.immutable.LazyList#LazyBuilder#DeferredState.eval"),

          // NO IDEA FOR NOW :)
          ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.collection.mutable.ArrayDequeOps.scala$collection$mutable$ArrayDequeOps$$super$sliding"),
        ),

      // Breaking changes since last LTS
      Build.mimaPreviousLTSDottyVersion -> Seq(
        // Quotes is assumed to only be implemented by the compiler and on the same version of the library.
        // It is exceptionally OK to break this compatibility. In these cases, there add new abstract methods that would
        // potentially not be implemented by others. If some other library decides to implement these,
        // they need to recompile and republish on each minor release.
        ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule.ValOrDefDefMethods"),
        ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule.ValOrDefDefTypeTest"),
        ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#defnModule.FunctionClass"),
        ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#defnModule.PolyFunctionClass"),
        ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#FlagsModule.AbsOverride"),
        ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SymbolMethods.paramVariance"),
        ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#TypeLambdaMethods.paramVariances"),
        ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#TypeReprMethods.dealiasKeepOpaques"),
      ),
    )
  }

  object TastyCore {
    val ForwardsBreakingChanges: Map[String, Seq[ProblemFilter]] = Map(
      // Additions that require a new minor version of tasty core
      Build.mimaPreviousDottyVersion -> Seq(
        ProblemFilters.exclude[DirectMissingMethodProblem]("dotty.tools.tasty.TastyFormat.FLEXIBLEtype"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("dotty.tools.tasty.TastyFormat.TRACKED"),
      ),

      // Additions since last LTS
      Build.mimaPreviousLTSDottyVersion -> Seq(
      )
    )

    val BackwardsBreakingChanges: Map[String, Seq[ProblemFilter]] = Map(
      Build.mimaPreviousDottyVersion -> Seq(
        // These are legitimate issues that needs to be investigated
        ProblemFilters.exclude[DirectMissingMethodProblem]("dotty.tools.tasty.TastyVersion.copy"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("dotty.tools.tasty.TastyVersion.copy$default$1"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("dotty.tools.tasty.TastyVersion.copy$default$2"),
        ProblemFilters.exclude[DirectMissingMethodProblem]("dotty.tools.tasty.TastyVersion.copy$default$3"),
      ),
      // Breaking changes since last LTS
      Build.mimaPreviousLTSDottyVersion -> Seq.empty // We should never break backwards compatibility
    )
  }

  object Interfaces {
    val ForwardsBreakingChanges: Map[String, Seq[ProblemFilter]] = Map(
      // Additions that require a new minor version of interfaces
      Build.mimaPreviousDottyVersion -> Seq(
      ),

      // Additions since last LTS
      Build.mimaPreviousLTSDottyVersion -> Seq(
      )
    )

    val BackwardsBreakingChanges: Map[String, Seq[ProblemFilter]] = Map(
      // Breaking changes since last LTS
      Build.mimaPreviousLTSDottyVersion -> Seq.empty // We should never break backwards compatibility
    )
  }

}
